import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @author Jiange
 * @create 2021-05-12-18:42
 */

/**
 * 线程不安全
 * 1. 出现java.util.ConcurrentModificationException错误  并发修改异常
 * 2. 由于有很多个线程进行读写的并发操作
 * 3. ArrayList线程不安全 使用Vector 底层是同步方法  但是数据的访问性能会差
 * 4. 为了性能可以使用Collections工具类  CopyOnWriteArrayList
 *      读写分离  底层使用的锁的方式 在一个人写的时候锁住  其他人可以读上一个版本
 *      set也是一样的   set的底层是HashMap
 *      map的底层是  数组链表红黑树  COncurrentHashMap  hashmap里装着一个一个Node节点  哈希值相等，二者也相等形成node单向链表  多了到8的时候就用红黑树
 */
public class NotSafeDemo {
    public static void main(String[] args) {
//        List list = new CopyOnWriteArrayList();
        Map<String,String> list = new ConcurrentHashMap<String,String>();
        for (int i = 0; i < 3000; i++) {
            new Thread(()->{
                list.put(UUID.randomUUID().toString().substring(0,8),"a");
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}
